package cn.biplam.front.template.pageFrame.mdManage;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.HtmlValue;
import cn.biplam.front.html.base.Html;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.html.base.Const.Overflow_Mode;
import cn.biplam.front.template.Template;
import cn.biplam.front.template.base.HiddenParam;

/**
 * 元数据对象管理-元数据管理详细信息显示界面模版
 * @author XiaoRuxing 2009-5-24下午03:24:27
 * @version 1.0
 */
public class MdObject implements Template{

	private HtmlDiv object;
	/** 表信息操作界面 */
	private HtmlDiv table;
	/** 元数据模型表的记录值，隐藏的input用于数据通信 */
	private HtmlValue mdObjId;
	/** 操作按钮 */
	private HtmlWindow operator;

	/** 此模版对象页面 */
	private String ID;
	/** 记录ID，模版显示的元数据对象的记录ID */
	private String recordID;
	/** 刷新当前页面动作ID */
	private String refreshActID;
	private Html refreshObj;

	private boolean isResize=true;

	/**
	 * 传入页面ID创建元数据管理详细信息显示界面
	 * @param ID 页面ID
	 * @throws ErrorMessage 
	 */
	public MdObject(String ID) throws ErrorMessage{
		this.ID=ID;
		_init();
	}

	/**
	 * 传入页面ID和元数据表记录ID创建元数据管理详细信息显示界面
	 * @param ID       页面ID
	 * @param recordID  元数据对象记录ID
	 * @throws ErrorMessage 
	 */
	public MdObject(String ID,String recordID) throws ErrorMessage{
		this.ID=ID;
		this.recordID=recordID;
		_init();
	}

	/**
	 * 传入页面ID和元数据表记录ID创建元数据管理详细信息显示界面
	 * @param ID       页面ID
	 * @param recordID  元数据对象记录ID
	 * @throws ErrorMessage 
	 */
	public MdObject(String ID,String recordID,boolean isResize) throws ErrorMessage{
		this.ID=ID;
		this.recordID=recordID;
		this.isResize = isResize;
		_init();
	}

	/**
	 * 传入页面ID和元数据表记录ID创建元数据管理详细信息显示界面
	 * @param ID       页面ID
	 * @param recordID  元数据对象记录ID
	 * @throws ErrorMessage 
	 */
	public MdObject(String ID,String recordID,String refreshActID) throws ErrorMessage{
		this.ID=ID;
		this.recordID=recordID;
		this.refreshActID = refreshActID;
		_init();
	}

	/**
	 * 初始化界面
	 * @throws ErrorMessage 
	 */
	private void _init() throws ErrorMessage{
		this.object=new HtmlDiv(ID,"mdo");
		this.mdObjId=new HtmlValue(ID+"r",recordID);
		this.refreshObj=new HiddenParam(".pact",refreshActID).get();
		this.table=new HtmlDiv(ID+"t");
		this.operator=new HtmlDiv(ID+"op","mdb");
		if(this.recordID!=null){
			this.operator.put(new HtmlValue(ID+"opr",this.recordID));
			this.object.put(new HtmlValue(ID+"r",this.recordID));
		}
	}

	/**
	 * 返回Operator区域的id(当传入了recordId时,可以将Operator区域作为提交容器,其包含隐藏rid)
	 * @return String
	 */
	public String getOperatorId(){
		return this.operator.getID();
	}

	/**
	 * 返回正文区域的id
	 * @return String
	 */
	public String getDomainId(){
		return this.table.getID();
	}

	/**
	 * 设置正文区的样式
	 * @param styleName
	 * @param styleValue
	 * @throws ErrorMessage
	 */
	public void setDomainStyle(String styleName,String styleValue) throws ErrorMessage{
		this.table.setStyle(styleName, styleValue);
	}

	/**
	 * 设置Operator区的样式
	 * @param styleName
	 * @param styleValue
	 * @throws ErrorMessage
	 */
	public void setOperatorStyle(String styleName,String styleValue) throws ErrorMessage{
		this.operator.setStyle(styleName, styleValue);
	}

	/**
	 * 插入元数据管理表详细内容界面
	 * @param table 表详细内容界面
	 * @throws ErrorMessage
	 */
	public void putTable(HtmlWindow table) throws ErrorMessage{
		this.table.put(table);
	}

	/**
	 * 设置元数据模型表记录ID
	 * @param sRecordID 元数据模型表记录ID
	 */
	public void setRecordID(String sRecordID){
		this.recordID=sRecordID;
		this.mdObjId.replace(sRecordID);
	}

	/**
	 * 放入操作按钮
	 * @param operator 操作按钮
	 * @throws ErrorMessage
	 */
	public void putOperator(HtmlWindow operator) throws ErrorMessage{
		if(operator!=null){
			this.operator.put(operator);
		}
	}

	/**
	 * 设置表格区域可滚动
	 * @throws ErrorMessage
	 */
	public void setTableScroll() throws ErrorMessage{
		this.table.setOverflow(Overflow_Mode.auto);
	}
	
	/**
	 * 设置表格区域横向可滚动
	 * @throws ErrorMessage
	 */
	public void setTableScroll_X() throws ErrorMessage{
		this.table.setOverflowX(Overflow_Mode.auto);
	}

	/**
	 * 设置表格区域纵向可滚动
	 * @throws ErrorMessage
	 */
	public void setTableScroll_Y() throws ErrorMessage{
		this.table.setOverflowY(Overflow_Mode.auto);
	}

	/**
	 * 获取元数据管理详细信息显示界面
	 * @return 元数据管理详细信息显示界面
	 * @throws ErrorMessage
	 */
	public HtmlWindow get() throws ErrorMessage {
		object.put(operator);
		object.put(mdObjId);
		object.put(refreshObj);
		object.put(table);
		if(this.isResize){
			object.bind("mdObjectResize('"+this.ID+"');");
		}
		return this.object;
	}
}
